package controller;
import models.Customer;
import models.Order;
import models.Product;
import models.Status;
import java.util.Iterator;
import java.util.Timer;
import java.util.TimerTask;
import java.util.TreeSet;
/**
*
* @author Ghiurutan
* The Order Processing Department class
*/
public class OPDept {
private static OPDept instance;
private static int commandNumber;
private Iterator<Order> iterator;
private TreeSet<Order> orderProcessing;
private InputOutput inOut;
private Timer timer;
private OPDept() {
inOut = new InputOutput();
orderProcessing = inOut.deserializeOrders();
}
public static OPDept getInstance() {
if (instance == null) {
instance = new OPDept();
}
return instance;
}
public Order[] getAllOrders() {
Order[] orders = new Order[orderProcessing.size()];
int i = 0;
iterator = orderProcessing.iterator();
while (iterator.hasNext()) {
orders[i++] = iterator.next();
}
return orders;
}
public int getNrOfOrders() {
return orderProcessing.size();
}
private Status getNextStatus(Order order) {
Status status = order.getCommandStatus();
if (status == Status.PENDING) {
status = Status.PROCESSING;
} else if (status == Status.PROCESSING) {
status = Status.SENT;
}
return status;
}
public void addOrder(Product product, Customer customer) {
Order order = new Order("Command " + (++commandNumber), product, customer);
orderProcessing.add(order);
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
order.setStatus(getNextStatus(order));
inOut.serializeOrders();
}
}, 5000);
timer.schedule(new TimerTask() {
@Override
public void run() {
order.setStatus(getNextStatus(order));
inOut.serializeOrders();
}
}, 10000);
}
}